<?php

namespace App\Console\Commands\Tasks;
use App\Services\Tools\HelperService;
use Illuminate\Console\Command;
use App\Http\Controllers\Common\TaskController;

class RyBroadcastRetryCommand extends Command
{
    //命令名
    protected $signature = 'task:ry_broadcast_retry';

    //命令描述:融云广播失败重试
    protected $description = '融云广播失败重试';

    public function __construct()
    {
        parent::__construct();
    }

    //业务处理
    //1，失败后第1分钟，第5分钟，第30分钟，第60分钟，第120分钟分别推送一次，直到成功，如果第120分钟推送仍然失败，则不再处理。
    //2，将重试的记录入库。
    public function handle()
    {
        $lockKey = 'lock:task:ry_broadcast_retry';  //防止超时导致定时任务重复处理
        $uniKey = uniqidReal();
        $redis = app('redis');
        $isLock = $redis->set($lockKey,$uniKey,'ex',50,'nx');
        if(!$isLock){
            return ;
        }
        $endTime = date('Y-m-d H:i:s',time()-60);  //60s之前有问题的
        $startTime = date('Y-m-d H:i:s',time()-122*60);  //最大120min之前的,需要多取一段时间，防止出现临界记录
//        $startTime = '2021-09-29 20:09:50';  //最大120min之前的,需要多取一段时间，防止出现临界记录
        $errorRecord = app('model_broadcast_ry_log')->whereIn('send_res',[3,4,5])->where('created_at','<=',$endTime)->where('created_at','>=',$startTime)->where('retry_num','<',5)->get();
        $errorRecord = empty($errorRecord)?[]:$errorRecord->toArray();
        echo " errorRecordNum:".count($errorRecord);
        if(!empty($errorRecord)){
            app('repo_ry_broadcast_retry')->crontabRetryBroadcast($errorRecord);
        }
        if($redis->get($lockKey) == $uniKey){
            $redis->del($lockKey);
        }
    }

}